home *** CD-ROM | disk | FTP | other *** search
/ 10,000 Great Games / 10,000 Great Games.iso / Product / 361 / Programs.txt < prev    next >
Text File  |  1999-03-31  |  10KB  |  241 lines

  1. TurboRisk Programming Reference
  2. ===============================
  3. Version 1.1 - March 1999
  4.  
  5.  
  6. Overview
  7. --------
  8.  
  9. TurboRisk programs are text files with extension .TRP that contain instructions in (a subset of) PASCAL. TurboRisk uses the Delphi-style Pascal interpreter (Delphin), free for non-commercial uses, by S.Kurinny & S.Kostinsky.
  10.  
  11. The language is essentially PASCAL. If you know PASCAL you should not have any particular program. Study the SIMPLE.TRP example program to have a starting point. A PASCAL course is far beyond the scope of this document (and my possibilities!).
  12. A very important restriction you must know is that the interpreter does not support ARRAYS.
  13.  
  14. Program structure
  15. -----------------
  16.  
  17. Each TurboRisk program MUST CONTAIN five procedures with predefined name that are called by TurboRisk when the computer player is expected to take some decision. Each procedure receives parameters and outputs results through global variables with pre-defined name too.
  18.  
  19. The ASSIGNMENT procedure is called during the initial assignment of territories to know which is the program's choice. Return the result in the ToTerritory global variable.
  20.  
  21. The PLACEMENT procedure is called at the beginning of each turn to decide where to place new armies. It is called N times, each one to place a single army, until all new armies are placed. Return the result in the ToTerritory global variable.
  22.  
  23. The ATTACK procedure is called at attack time. Each call to ATTACK corresponds to a single throw of the dice. Return the program's choice in the FromTerritory and ToTerritory global variables. Set FromTerritory to 0 if you decide not to attack and end your attack phase.
  24.  
  25. The OCCUPATION procedure is called after a successful attack. The global variables FromTerritory and ToTerritory are properly set by TurboRisk when entering the routine. Return the number of armies you want to move in the Armies global variable.
  26.  
  27. The FORTIFICATION procedure is called after the attack phase. Return the program's choice in the FromTerritory, ToTerritory and Armies global variables. Set FromTerritory to 0 if you decide not to move any army and end your turn.
  28.  
  29. Variables
  30. ---------
  31.  
  32. You can define your own variables, procedures and functions. Please remember that all your variables will be LOCAL variables, I mean erased between calls. TurboRisk provides a place to store GLOBAL values through the UBufferSet and UBufferGet functions explained below. You have 50 variant buffers for your own use.
  33.  
  34. TurboRisk interface routines
  35. ----------------------------
  36.  
  37. TurboRisk provides a large set of procedures and functions that let your program know things about territories, players, continents and status of the game.
  38. Territories are numbered from 1 to 42, players from 1 to 10, continents from 1 to 6.
  39.  
  40. Territories 
  41. -----------
  42.  1 Alaska
  43.  2 Northwest Territory
  44.  3 Greenland
  45.  4 Alberta
  46.  5 Ontario
  47.  6 Quebec
  48.  7 Western US
  49.  8 Eastern US
  50.  9 Central America
  51. 10 Venezuela
  52. 11 Peru
  53. 12 Brazil
  54. 13 Argentina
  55. 14 North Africa
  56. 15 Egypt
  57. 16 East Africa
  58. 17 Congo
  59. 18 South Africa
  60. 19 Madagascar
  61. 20 Iceland
  62. 21 Scandinavia
  63. 22 Ukraine
  64. 23 Northern Europe
  65. 24 Great Britain
  66. 25 Western Europe
  67. 26 Southern Europe
  68. 27 Middle East
  69. 28 Yamal-Nemets
  70. 29 Kazakhstan
  71. 30 India
  72. 31 Siam
  73. 32 China
  74. 33 Mongolia
  75. 34 Taymyr
  76. 35 Yakut
  77. 36 Buryat
  78. 37 Koryak
  79. 38 Japan
  80. 39 Indonesia
  81. 40 Western Australia
  82. 41 Eastern Australia
  83. 42 New Guinea
  84.  
  85. Continents
  86. ----------
  87.  
  88. 1 North America
  89. 2 South America
  90. 3 Europe
  91. 4 Africa
  92. 5 Asia
  93. 6 Australia
  94.  
  95. Routines about Territories 
  96. --------------------------
  97.  
  98. function TName(T: integer): string;
  99. returns the name of territory T, '?' if T is out of range
  100.  
  101. function TOwner(T: integer): integer;
  102. returns the owner of territory T, 0 if T is unassigned, -1 if T is out of range
  103.  
  104. function TArmies(T: integer): integer;
  105. returns the number of armies on territory T, 0 if T is unassigned, -1 if T is out of range
  106.  
  107. function TContinent(T: integer): integer;
  108. returns the ID of the continent which territory T belongs to, -1 if T is out of range
  109.  
  110. function TBordersCount(T: integer): integer;
  111. returns the number of borders of territory T (max 6), -1 if T is out of range
  112.  
  113. function TBorder(T,B: integer): integer;
  114. returns bordering territory #B of territory T, -1 if T or B are out of range
  115.  
  116. function TIsBordering(T1,T2: integer): boolean;
  117. returns true if territory T1 is bordering on territory T2, false if not or T or B are out of range
  118.  
  119. function TIsFront(T: integer): boolean;
  120. returns true if territory T is owned by current player and has at least one bordering territory occupied by opponents, false if not or T is out of range
  121.  
  122. function TIsMine(T: integer): boolean;
  123. returns true if territory T is owned by current player, false if not or T is out of range
  124.  
  125. function TFrontsCount(T: integer): integer;
  126. returns the number of territories bordering on territory T which are occupied by opponents, -1 if T is out of range
  127.  
  128. function TFront(T,F: integer): integer;
  129. returns bordering enemy territory #F of territory T, -1 if T or F are out of range
  130.  
  131. function TStrongestFront(T: integer; var ET,EA: integer): boolean;
  132. returns false if T is out of range, otherwise true the "var" variables will contain information on territory T:
  133.   ET: number of the strongest enemy's territory bordering on T, 0 if T has not fronts
  134.   EA: enemy's armies on territory ET
  135. (unassigned territories are not counted)
  136.  
  137. function TWeakestFront(T: integer; var ET,EA: integer): boolean;
  138. returns false if T is out of range, otherwise true
  139. the "var" variables will contain information on territory T:
  140.   ET: number of the weakest enemy's territory bordering on T, 0 if T has not fronts
  141.   EA: enemy's armies on territory ET
  142. (unassigned territories are not counted)
  143.  
  144. function TPressure(T: integer): integer;
  145. returns the total number of enemy armies bordering on territory T, -1 if T is out of range
  146.  
  147. Routines about Players
  148. ----------------------
  149.  
  150. function PMe: integer;
  151. returns the ID of the player in turn
  152.  
  153. function PName(P: integer): string;
  154. returns player's P name, '?' if P is out of range
  155.  
  156. function PProgram(P: integer): string;
  157. returns player's P program file name (lowercase) if player is computer,
  158. 'human' if human, '?' if P is out of range
  159.  
  160. function PActive(P: integer): boolean;
  161. returns true if player P is active, false if not or P is out of range
  162.  
  163. function PHuman(P: integer): boolean;
  164. returns true if P is a human player, false if P is computer player or P is out of range
  165.  
  166. function PArmiesCount(P: integer): integer;
  167. returns the number of armies totally controlled by player P on all of its territories, -1 if P is out of range
  168.  
  169. function PNewArmies(P: integer): integer;
  170. returns the number of armies which player P still has to place on his territories, -1 if P is out of range
  171.  
  172. function PTerritoriesCount(P: integer): integer;
  173. returns the number of territories controlled by player P, -1 if P is out of range
  174.  
  175. Routines about Continents
  176. -------------------------
  177.  
  178. function COwner(C: integer): integer;
  179. returns the owner of continent C, 0 if C has more then one occupant, -1 if C is out of range
  180.  
  181. function CBonus(C: integer): integer;
  182. returns the number of armies (per turn) which the control of continent C entitles to, -1 if C is out of range
  183.  
  184. function CTerritoriesCount(C: integer): integer;
  185. returns the number of territories belonging to continent C, -1 if C is out of range
  186.  
  187. function CTerritory(C,T: integer): integer;
  188. returns the ID of territory #T belonging to continent C, -1 if T or C are out of range
  189.  
  190. function CBordersCount(C: integer): integer;
  191. returns the number of territories bordering on continent C (max 6), -1 if C is out of range
  192.  
  193. function CBorder(C,B: integer): integer;
  194. returns bordering territory #B of continent C, -1 if C or B are out of range
  195.  
  196. function CAnalysis(C: integer; var PT,PA,ET,EA: integer): boolean;
  197. returns false if C is out of range, otherwise true 
  198. the "var" variables will contain information on continent C:
  199.   PT: player in turn's number of territories on continent C
  200.   PA: player in turn's armies on continent C
  201.   ET: enemy's number of territories on continent C
  202.    EA: enemy's armies on continent C
  203. (unassigned territories are not counted)
  204.  
  205. function CLeader(C: integer; var P,T,A: integer): boolean;
  206. returns false if C is out of range, otherwise true
  207. the "var" variables will contain information on continent C:
  208.   P: leader = player who controls greatest number of territories
  209.   A: leader's armies on continent C
  210.   T: leader's number of territories on continent C
  211. if two or more players own the same number of territories, the leader is the one which has more armies. If continent is empty (all territories unissegned) P returns 0.
  212. (unassigned territories are not counted)
  213.  
  214. Routines about Status of the game
  215. ---------------------------------
  216.  
  217. function SConquest: boolean;
  218. returns true if current player has conquered at least one territory on current turn, otherwise false
  219.  
  220. function SPlayersCount: integer;
  221. returns the number of active players
  222.  
  223. Other routines (utilities)
  224. --------------------------
  225.  
  226. procedure UMessage(M: array);
  227. display a modal window with message M
  228.  
  229. procedure ULog(M: array);
  230. write message M on the log
  231.  
  232. procedure UBufferSet(B: integer; V: variant);
  233. set B element of Player's buffer to value V (B ranges from 1 to 50)
  234.  
  235. function UBufferGet(B: integer): variant;
  236. returns Bth element of Player's buffer, -1 if B is out of range (B ranges from 1 to 50)
  237.  
  238. function URandom(R: integer): variant;
  239. if R>0 returns an integer random number I in the range 0 <= I < R, otherwise
  240. returns a real-type number X in the range 0 <= X < 1
  241.